package src.itheima01;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;

/*
    去除ArrayList集合中的重复元素
    1.不需要保证集合中元素的顺序
    2.需要保证集合中元素的顺序
        java.util.HashSet<E> 集合
            成员方法: 在Set接口中定义的
                boolean addAll(Collection<E> c) : 把方法参数Collection集合中的所有内容添加到调用addAll方法的Collection集合中
            构造方法:
                HashSet(Collection<? extends E> c) : 构造一个包含指定 collection 中的元素的新 set。
             ArrayList底层机构是数组，取值的时候先进后出
 */
public class Demo01QuChong {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();
        set.add(100);
        set.add(800);
        set.add(500);
        set.add(700);
        set.add(600);
        System.out.println(set);//[800, 100, 500, 600, 700]

        //把set集合中的内容,排序(按照从小到大的顺序)输出
        //HashSet集合转换成ArrayList集合   Set --> List
        ArrayList<Integer> list = new ArrayList<>(set);
        System.out.println("排序前: "+list);//排序前: [800, 100, 500, 600, 700]
        Collections.sort(list);
        System.out.println("排序后: "+list);//排序后: [100, 500, 600, 700, 800]
        method05();
        method04();
        method03();
        method02();
        method01();
    }

    private static void method05() {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        list.add("World");
        list.add("Java");
        list.add("Java");
        for (String s : list) {
            System.out.println(s);
        }
        //利用构造方法HashSet元素唯一过滤掉重复数组
        HashSet<String> set = new HashSet<>(list);//把构造方法参数list中的元素,转换到了HashSet集合中

        System.out.println(set);//[Java, Hello, World]
    }

    private static void method04() {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        list.add("World");
        list.add("Java");
        list.add("Java");

        HashSet<String> set = new HashSet<>();
        set.addAll(list);//把方法参数list中的所有元素,添加到set中
        System.out.println(set);//[Java, Hello, World]
    }

    private static void method03() {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        list.add("World");
        list.add("Java");
        list.add("Java");
        System.out.println(list);//[Hello, Hello, World, World, Java, Java]
        //2.需要保证集合中元素的顺序
        LinkedHashSet<String> linked = new LinkedHashSet<>();
        for (String str : list) {
            linked.add(str);
        }
        System.out.println(linked);//[Hello, World, Java]
    }

    private static void method02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        list.add("World");
        list.add("Java");
        list.add("Java");

        //1.不需要保证集合中元素的顺序
        HashSet<String> set = new HashSet<>();
        for (String str : list) {
            set.add(str);
        }
        System.out.println(set);//[Java, Hello, World]
    }

    private static void method01() {
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("Hello");
        list.add("World");
        list.add("World");
        list.add("Java");
        list.add("Java");
        //创建新的ArrayList集合
        ArrayList<String> newList = new ArrayList<>();
        //遍历原集合
        for (String str : list) {
            //新集合中,不包含str
            if(!newList.contains(str)) {
                //添加到新集合中
                newList.add(str);
            }
        }
        System.out.println(newList);//[Hello, World, Java]
    }
}
